package com.gonsin.gview.logic.validate;

import com.gonsin.gview.annotations.enums.ButtonAction;
import com.gonsin.gview.logic.exceptions.BaseGViewException;
import com.gonsin.gview.model.GButtonModel;
import com.gonsin.gview.model.form.GFormBoardModel;
import org.apache.commons.lang3.StringUtils;

/**
 * 针对 按钮 模板的格式校验
 */
public class ButtonValidate implements IModelValidate<GButtonModel>{

    @Override
    public void validate(ValidateContext context, GButtonModel button) {
        String action = button.getAction();
        ButtonAction actionEnums = ButtonAction.valueOf(action);
        switch (actionEnums){
            case VIEW_BY_DIALOG:
            case VIEW:
                if(StringUtils.isEmpty(button.getView())){
                    throw new BaseGViewException("【%s】中的按钮设置了 action=%s，但是没有设置view值", context.getViewName(), button.getAction());
                }
                if(context.getCoreService().findViewByName(button.getView()) == null){
                    throw new BaseGViewException("【%s】中的按钮设置了 action=%s，但是设置view=%s，但是没有找到%s值",
                            context, button.getAction(), button.getView(), button.getView());
                }
                break;

            case CONFIRM:
            case CONFIRM_AND_CLOSE:
                if(context.getActionService().findActionById(button.getButtonId()) == null){
                    throw new BaseGViewException("【%s】中的按钮设置了 action=%s，但是没有设置" +
                            "actionName\\" +
                            "confirmAction\\" +
                            "confirmActionClass 其中之一", context.getViewName(), button.getAction());
                }
                break;
            case BATCH:
                if(context.getActionService().findActionById(button.getButtonId()) == null){
                    throw new BaseGViewException("【%s】中的按钮设置了 action=%s，但是没有设置" +
                            "actionName\\" +
                            "batchAction\\" +
                            "batchActionClass 其中之一", context.getViewName(), button.getAction());
                }
                break;
            case UPLOAD_FILE:
                if(context.getActionService().findActionById(button.getButtonId()) == null){
                    throw new BaseGViewException("【%s】中的按钮设置了 action=%s，但是没有设置" +
                            "actionName\\" +
                            "fileAction\\" +
                            "fileActionClass 其中之一", context.getViewName(), button.getAction());
                }
                break;

            case DOWNLOAD:
                if(StringUtils.isEmpty(button.getDownloadUrl())){
                    throw new BaseGViewException("【%s】中的按钮设置了 action=%s，但是没有设置" +
                            "downloadUrl", context.getViewName(), button.getAction());
                }
                break;

            case LINK:
                if(StringUtils.isEmpty(button.getDownloadUrl())){
                    throw new BaseGViewException("【%s】中的按钮设置了 action=%s，但是没有设置" +
                            "link", context.getViewName(), button.getAction());
                }
                break;
        }

        // TODO 校验props

        // TODO 校验showIf、disableIf的语法
    }
}
